package Vis;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class XMLUtil {
    // 该方法用于从XML配置文件中提取具体类类名，并返回相应对象
    public static AVisitor getBean() {
        try {
            // 使用类加载器获取输入流
            InputStream inputStream = XMLUtil.class.getClassLoader().getResourceAsStream("configVis.xml");
            if (inputStream == null) {
                throw new RuntimeException("找不到配置文件 configVis.xml");
            }

            // 创建文档构建器工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 创建文档构建器
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 解析输入流，生成Document对象
            Document doc = builder.parse(inputStream);
            doc.getDocumentElement().normalize();

            // 获取包含类名的文本节点
            NodeList nl = doc.getElementsByTagName("ClassName");
            Node classNode = nl.item(0).getFirstChild();
            String cName = classNode.getNodeValue();

            // 通过类名生成实例并返回
            Class<?> c = Class.forName(cName);
            return (AVisitor) c.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}